<!DOCTYPE html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
test(function() {
  // The property descriptor of location[Symbol.toPrimitive] must be
  //   {configurable: false, enumerable: false, writable: false,
  //    value: undefined}.
  assert_own_property(location, Symbol.toPrimitive,
                      "location does not have Symbol.toPrimitive property.");
  var pd = Object.getOwnPropertyDescriptor(location, Symbol.toPrimitive);
  assert_false(pd.configurable,
               "location's Symbol.toPrimitive is configurable.");
  assert_false(pd.enumerable, "location's Symbol.toPrimitive is enumerable.");
  assert_false(pd.writable, "location's Symbol.toPrimitive is writable.");
  assert_true('value' in pd,
              "location's Symbol.toPrimitive is not a data property.");
  assert_equals(pd.value, undefined,
                "The value of location's Symbol.toPrimitive is not undefined.");

  // location's Symbol.toPrimitive supersedes Object.prototype's one.
  // https://crbug.com/680409
  Object.prototype[Symbol.toPrimitive] = function() { return "hacked"; };
  assert_equals(String({}), "hacked",
                "Object.prototype doesn't have a hacked Symbol.toPrimitive " +
                "property.");
  assert_not_equals(String(location), "hacked",
                    "location's Symbol.toPrimitive gets hacked.");
}, "Location objects must have Symbol.toPrimitive property defined.");

done();
</script>
